package main

import (
	"fmt"
	"time"
)

// main
//
//	@Description:一个Go线程上，可以起多个协程
//	Go协程：
//		1.有独立的栈空间
//		2.共享程序堆空间
//		3.调度由用户控制
//		4.协程是轻量级的线程
//
// 主线程是一个物理线程，直接作用在CPU上的，是重量级的，非常耗费CPU的，非常的消耗资源
// 协程是从主线程开启的，是轻量级的线程，是逻辑态，是用户态
// Golang的协程机制是重要的特点，可以轻松的开启上万个协程。
func main() {
	go test() //开启一个协程
	for i := 0; i < 10; i++ {
		fmt.Println("main() hello world index=", i, "time=", time.Now())
		time.Sleep(time.Second)
	}
	fmt.Println("main() STOP !!!")
}

// test
//
//	@Description:
//
// 如果主线程退出了，协程还在执行，也会退出
// 协程也可以自己结束
func test() {
	for i := 0; i < 100; i++ {
		fmt.Println("test() hello world  index=", i, "time=", time.Now())
		time.Sleep(time.Second)
	}
	fmt.Println("test() STOP !!!")
}
